package cn.edu.buu.news.controller;


import cn.edu.buu.news.entity.User;
import cn.edu.buu.news.entity.UserTaskNote;
import cn.edu.buu.news.service.UserService;
import cn.edu.buu.news.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping
public class UserController {

    @Autowired
    private UserService userService;


    //登录
    @PostMapping("/login")
    public Result login(@RequestBody User loginAdmin) {
        return userService.findAdmin(loginAdmin.getUserName(), loginAdmin.getPassword());
    }
    //退出
    @GetMapping("/logout")
    public Result logout(@RequestParam("id") Long id) {
        userService.logout(id);
        return Result.success();
    }


    // 根据ID获取用户信息（对应前端初始化用户信息）
    @GetMapping("/user/getById")
    public Result getUserById(@RequestParam("id") Long id) {
        User user = userService.getById(id);
        if (user != null) {
            user.setPassword(null); // 隐藏密码
            return Result.success(user);
        } else {
            return Result.fail(500,"用户不存在");
        }
    }

    // 更新个人信息（对应前端提交信息）
    @PostMapping("/user/updateInfo")
    public Result updateUserInfo(@RequestBody Map<String, Object> params) {
        // 从参数中提取用户ID和更新信息
        Long userId = Long.valueOf(params.get("userId").toString());
        User user = new User();
        user.setId(userId);
        user.setNickname(params.get("nickname").toString());
        user.setPhone(params.get("phone").toString());
        user.setGender(params.get("gender").toString());
        user.setBirthday(params.get("birthday") != null ? params.get("birthday").toString() : null);
        user.setBio(params.get("bio") != null ? params.get("bio").toString() : null);
        // 补充邮箱字段更新支持
        if (params.containsKey("email")) {
            user.setEmail(params.get("email").toString());
        }

        boolean success = userService.updateUserInfo(user);
        return success ? Result.success() : Result.fail(500,"更新个人信息失败");
    }

    // 上传头像（接收文件并返回URL）
    @PostMapping("/user/uploadAvatar")
    public Result uploadAvatar(@RequestParam("file") MultipartFile file) throws IOException {
        // 调用服务层处理文件上传，返回头像URL
        String avatarUrl = userService.uploadAvatar(file);
        return avatarUrl != null ? Result.success(Map.of("avatarUrl", avatarUrl)) : Result.fail(500,"头像上传失败");
    }

    // 更新头像URL到用户表
    @PostMapping("/user/updateAvatar")
    public Result updateAvatar(@RequestBody Map<String, Object> params) {
        Long userId = Long.valueOf(params.get("userId").toString());
        String avatarUrl = params.get("avatarUrl").toString();
        // 更新用户头像URL时同步更新userInfo中的headPic字段
        boolean success = userService.updateAvatarUrl(userId, avatarUrl);
        return success ? Result.success() : Result.fail(500,"更新头像地址失败");
    }

    // 保存任务笔记
    @PostMapping("/task/updateNote")
    public Result updateTaskNote(@RequestBody UserTaskNote note) {
        boolean success = userService.saveNote(note);
        return Result.success(success);
    }

    // 新增获取当前登录用户信息的接口（兼容前端可能的调用）
    @GetMapping("/user/profile")
    public Result getCurrentUserProfile() {
        // 实际实现应从登录状态中获取当前用户ID
        // 这里仅为兼容示例，实际项目需结合权限框架获取当前用户
        return Result.fail(501, "请使用/user/getById接口并传入用户ID");
    }

    @GetMapping("/user/stats")
    public Result getUserStats() {
        // 实际业务逻辑：获取用户统计数据（如学习进度、任务完成量等）
        Map<String, Object> stats = new HashMap<>();
        stats.put("learningDays", 30); // 示例：学习天数
        stats.put("completedTasks", 15); // 示例：完成任务数
        return Result.success(stats);
    }

}